import cv2 as cv
import numpy as np
from myFFT import myfft_function


fft_images = r"E:\studylife\detectflaws\code\python\FFT\6_25\2"  # 结果图像的保存路径
videos_path = r"E:\studylife\detectflaws\code\python\videos\6_25\2.mp4"  # 原视频存放地址
save_path = r"E:\studylife\detectflaws\code\python\image\6_25\2"  # 原视频裁切出来的图片的存放地址

# 初始化要计算的图片区域
columns_high = 640
columns_low = 0
rows_high = 480
rows_low = 0

# 下采样次数 Number of downsampling times   1为不做下采样
nodt = 4

# 下采样后输出的图片尺寸
row = int(rows_high / nodt)
columns = int(columns_high / nodt)

map_quantity_begin = 0  # 所计算的视频的起始帧数
map_quantity_end = 400  # 所计算的视频的结束帧数

Hz = 0.13  # 所要选取的频率

# 创建输出的相位列表
list_pha_gray = []

# 创建列表存储对应帧数视频图像
lists_gray = []
array_gray = []
for k in range(map_quantity_begin, map_quantity_end):  # 读取map_quantity帧图片计算fft
    img = cv.imread(f'{save_path}/{k}.jpg', flags=0)  # flags=0读取为灰度图像
    # 为列表赋值
    lists_gray.append(img)
array_gray = np.array(lists_gray)  # 把lists_gray转换成np.array类型方便后续裁切

for i in range(rows_low, rows_high, nodt):  # nodt为步长即下采样
    for j in range(columns_low, columns_high, nodt):
        # fft运算得到指定频率幅度值和相位值
        amp_gray, pha_gray = myfft_function(array_gray[:, i, j], map_quantity_begin, map_quantity_end, Hz)
        list_pha_gray.append(pha_gray)

# 相位图
# print('相位的列表', list_pha_gray)
# 将1行的列表重构为图像行列
list_pha_gray_re = np.reshape(list_pha_gray, (row, columns))
# print('按行列排序后的相位蓝', list_pha_gray_re)
# 将列表格式的数据转换为np.array格式便于后续直接输出图像
array_pha_gray_re = np.array(list_pha_gray_re, dtype=np.uint8)
array_pha_gray_re = cv.resize(array_pha_gray_re, (640, 480))
# 保存图片
cv.imwrite(
    f'{fft_images}/nodt{nodt},Hz({Hz})pha_gray,r({rows_low},{rows_high})c({columns_low}, {columns_high})m({map_quantity_begin},{map_quantity_end}).jpg',
    array_pha_gray_re)
# 展示图像
cv.imshow('pha_gray', array_pha_gray_re)